package com.colorlight.cloud.gateway.service;

import com.colorlight.cloud.gateway.api.message.constraint.schedule.ScheduleActions;

/**
 * @author Demon
 * @description 下发策略
 * @date 22/3/2024  下午3:34
 */
public interface PublishStrategy {
	/**
	 * 指令固有属性- 型号
	 *
	 * @return 当前指令的策略类型
	 * @author Demon
	 * @date 22/3/2024/下午5:13
	 **/
	String strategyType();
	
	/**
	 * 指令反序列化
	 *
	 * @param type 指令类型名 不同策略映射不同
	 * @param json 指令实体：这里只能将他序列化才能统一 传送
	 * @return 指令实体
	 * @author Demon
	 * @date 22/3/2024/下午5:14
	 **/
	ScheduleActions getScheduleActions(String type, String json);
	
	/**
	 * @param type 指令类型 type+{@link PublishStrategy#strategyType()} 确定 每个策略中指令唯一
	 * @return 当前type对应的类
	 * @author Demon
	 * @date 22/3/2024/下午5:15
	 **/
	Class<? extends ScheduleActions> getScheduleActionsClass(String type);
}
